#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e6 + 5;

int result[maxn]; // 存储结果
int temp[maxn];   // 临时存储

// 将数组s的值加到ans中
void addArrays(int ans[], const int s[]) {
  for (int i = 0; i < maxn; i++) {
    ans[i] += s[i];
  }
  for (int i = 1; i < maxn; i++) {
    ans[i] += ans[i - 1] / 10; // 处理进位
    ans[i - 1] %= 10;          // 保留个位
  }
}

// 将ans数组乘以k
void multiplyArray(int ans[], int k) {
  for (int i = 0; i < maxn; i++) {
    ans[i] *= k;
  }
  for (int i = 1; i < maxn; i++) {
    ans[i] += ans[i - 1] / 10; // 处理进位
    ans[i - 1] %= 10;          // 保留个位
  }
}

int main() {
  int n;
  cin >> n;

  temp[0] = 1; // 初始化temp数组
  for (int i = 1; i <= n; i++) {
    multiplyArray(temp, i); // 计算i的阶乘
    addArrays(result, temp); // 将阶乘结果加到总结果中
  }
  
  int k = maxn - 1;
  while (result[k] == 0) // 找到结果的最高位
    k--;
  
  for (int i = k; i >= 0; i--) {
    cout << result[i]; // 输出结果
  }
  return 0;
}